MapReduce একটি শক্তিশালী কৌশল যা ডেটাবেসে জটিল কুয়েরি এবং বিশ্লেষণ কার্য সম্পাদন করতে ব্যবহৃত হয়। CouchDB তে MapReduce ব্যবহার করে আপনি complex queries বা জটিল কুয়েরি সহজেই কার্যকরভাবে পরিচালনা করতে পারেন। CouchDB এর MapReduce পদ্ধতি ডেটার বিশ্লেষণ, ফিল্টারিং এবং গ্রুপিংয়ের জন্য খুবই কার্যকরী। এটি মূলত দুটি ধাপে কাজ করে: Map এবং Reduce।
CouchDB তে MapReduce কৌশলটি Views এর মাধ্যমে কাজ করে। যখন আপনি একটি view তৈরি করেন, তখন আপনি একটি Map function এবং একটি Reduce function সংজ্ঞায়িত করেন। Map function ডেটা কুয়েরি করার জন্য ব্যবহার করা হয় এবং Reduce function Map থেকে পাওয়া ডেটাকে প্রক্রিয়া করে এবং সারাংশ তৈরি করে।
Map function ডেটাকে key-value পেয়ারে রূপান্তর করে। এর মাধ্যমে ডেটাকে বিভিন্ন ক্যাটাগরি বা গোষ্ঠীতে বিভক্ত করা যায়।
Reduce function, Map এর মাধ্যমে উৎপন্ন key-value পেয়ারগুলোর উপর পরবর্তী অপারেশন যেমন যোগফল, গড়, বা অন্যান্য অগ্রীমেশন (aggregation) চালায়। এটি আপনার কুয়েরি ফলাফলকে প্রক্রিয়া করার জন্য ব্যবহৃত হয়।
ধরা যাক, আমাদের একটি ডাটাবেসে বিক্রয় (sales) সম্পর্কিত ডেটা রয়েছে এবং আমরা প্রতিটি বিক্রয় প্রতিনিধির মোট বিক্রয় পরিমাণ বের করতে চাই। এই ক্ষেত্রে আমরা MapReduce ব্যবহার করে জটিল কুয়েরি সম্পাদন করতে পারি।
function (doc) {
if (doc.type === "sale") {
emit(doc.salesperson, doc.amount);
}
}
Explanation:
emit(doc.salesperson, doc.amount)
দ্বারা আমরা salesperson কে key এবং amount কে value হিসেবে emit করছি।doc.type === "sale"
চেক করে নিশ্চিত করছি যে শুধুমাত্র sale টাইপের ডকুমেন্টগুলোকে পাস করা হবে।function (keys, values, rereduce) {
return sum(values);
}
Explanation:
sum(values)
ব্যবহার করে সমস্ত salesperson এর বিক্রয় পরিমাণ যোগফল করে একটি মোট পরিমাণ প্রদান করবে।rereduce
ফ্ল্যাগটি ব্যবহার করা হয় যখন CouchDB বিভিন্ন Reduce ফলাফল পুনরায় কম্বাইন করতে চাই।CouchDB এ এই MapReduce কুয়েরি তৈরি করা হলে, এটি একটি view আকারে সংরক্ষিত হয়। আপনি এই view-এর মাধ্যমে complex queries চালাতে পারেন।
এখন, আপনি CouchDB তে view তৈরি করতে পারেন:
{
"_id": "_design/sales",
"views": {
"total_sales_per_salesperson": {
"map": "function (doc) { if (doc.type === 'sale') { emit(doc.salesperson, doc.amount); } }",
"reduce": "function (keys, values, rereduce) { return sum(values); }"
}
}
}
_design/sales
একটি ডকুমেন্ট ID যা view সংরক্ষণ করে।total_sales_per_salesperson
হলো view name, যা Map এবং Reduce ফাংশন ধারণ করে।এখন আপনি তৈরি করা view থেকে কুয়েরি চালাতে পারেন:
GET /database/_design/sales/_view/total_sales_per_salesperson
এই কুয়েরিটি আপনি সার্ভারে পাঠালে CouchDB MapReduce এর মাধ্যমে ডেটা প্রক্রিয়া করে এবং প্রতি বিক্রয় প্রতিনিধির জন্য মোট বিক্রয় পরিমাণ প্রদান করবে।
{
"rows": [
{
"key": "John",
"value": 15000
},
{
"key": "Alice",
"value": 12000
}
]
}
key
হলো বিক্রয় প্রতিনিধি এবং value
হলো তাদের মোট বিক্রয় পরিমাণ।ধরা যাক, আপনি আপনার salesperson এর বিক্রয় পরিমাণের গড় বের করতে চান। এই কাজটি MapReduce এর সাহায্যে খুব সহজেই করা যায়।
function (doc) {
if (doc.type === "sale") {
emit(doc.salesperson, doc.amount);
}
}
function (keys, values, rereduce) {
var total = sum(values);
var count = values.length;
return total / count;
}
এখানে Reduce function বিক্রয় পরিমাণের মোট যোগফল (sum) এবং মোট সেলস প্রতিনিধি সংখ্যা (count) নিয়ে গড় বের করবে।
সারাংশ:
CouchDB তে MapReduce ব্যবহার করে আপনি জটিল কুয়েরি যেমন aggregations, groupings, এবং advanced filtering করতে পারেন। এটি CouchDB এর বিশাল ডেটাসেটের উপর কার্যকরীভাবে কাজ করার ক্ষমতা প্রদান করে এবং বিভিন্ন ধরনের বিশ্লেষণ করতে সহায়ক।
common.read_more